/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package starfox;

import util.Botao;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.Music;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
import org.newdawn.slick.state.transition.FadeInTransition;
import org.newdawn.slick.state.transition.FadeOutTransition;

/**
 *
 * @author Lucas
 */

public class MainMenuState extends BasicGameState {
    //Imagens do menu principal
    Image background = null;
    Botao inicio = null;
    Botao instrucoes = null;
    Botao creditos = null;
    Botao recordes = null;

    //Número do estado
    int stateID = 0;

    //Atributos para pegar a posição do mouse, botões do teclado etc
    Input input = null;
    int mouseX;
    int mouseY;

    //Música de fundo
    Music musica = null;

    //Controla se o mouse está sobre os botões
    boolean sobreInicio = false;
    boolean sobreInstrucoes = false;
    boolean sobreCreditos = false;
    boolean sobreRecordes = false;

    MainMenuState( int stateID )
    {
       this.stateID = stateID;
    }

    @Override
    public int getID() {
        return stateID;
    }

    @Override
    public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException {
        //Carregar as imagens
        background = new Image("imagens/Intro.jpg");
        Image botoes = new Image("imagens/botoes.png");
        
        //Carregar a música de fundo
        musica = new Music("music/Venom.ogg");

        //Corta a imagem dos botões para gerar os de início, instruções, créditos e recordes
        inicio = new Botao(29, 533, botoes, 0, 5, 135, 32);
        instrucoes = new Botao(178, 528, botoes, 136, 0, 212, 45);
        creditos = new Botao(404, 528, botoes, 349, 0, 169, 37);
        recordes = new Botao(591, 533, botoes, 519, 5, 178, 32);
    }

    //Desenhar as imagens
    @Override
    public void render(GameContainer arg0, StateBasedGame arg1, Graphics arg2) throws SlickException {
        background.draw();
        inicio.draw();
        instrucoes.draw();
        creditos.draw();
        recordes.draw();
    }


    @Override
    public void update(GameContainer gc, StateBasedGame sb, int delta) throws SlickException {
        //Pega a posição do mouse
        input = gc.getInput();
        mouseX = input.getMouseX();
        mouseY = input.getMouseY();

        //Tocar a música do menu, se ainda não estiver sendo tocada
        if(!musica.playing()) musica.play();

        sobreInicio = false;
        sobreInstrucoes = false;
        sobreCreditos = false;
        sobreRecordes = false;

        //Verifica se o mouse está sobre os botões
        if( ( mouseX >= inicio.getX() && mouseX <= inicio.getX() + inicio.getImageWidth()) &&
            ( mouseY >= inicio.getY() && mouseY <= inicio.getY() + inicio.getImageHeight()) )
        {
            sobreInicio = true;
        }else if( ( mouseX >= instrucoes.getX() && mouseX <= instrucoes.getX()+ instrucoes.getImageWidth()) &&
            ( mouseY >= instrucoes.getY() && mouseY <= instrucoes.getY() + instrucoes.getImageHeight()) )
        {
            sobreInstrucoes = true;
        }else if( ( mouseX >= creditos.getX() && mouseX <= creditos.getX()+ creditos.getImageWidth()) &&
            ( mouseY >= creditos.getY() && mouseY <= creditos.getY() + creditos.getImageHeight()) )
        {
            sobreCreditos = true;
        }else if( ( mouseX >= recordes.getX() && mouseX <= recordes.getX()+ recordes.getImageWidth()) &&
            ( mouseY >= recordes.getY() && mouseY <= recordes.getY() + recordes.getImageHeight()) )
        {
            sobreRecordes = true;
        }

        /*Se as condições forem verdadeiras, aumenta o tamanho dos botões
         * e verifica se o jogador clicou em um deles. Caso isto aconteça,
         * o jogo vai para a respectiva tela. Se o mouse não estiver sobre
         * os botões, estes voltam ao tamanho normal.
         */
        if(sobreInicio){
            if(inicio.getScale() < 1.05f)
                inicio.changeScale(Botao.scaleStep*delta);
            if(input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)){
                sb.enterState(StarFox.GAMEPLAYSTATE, new FadeOutTransition(), new FadeInTransition());
                inicio.setScale(1);
            }
        }else{
            if(inicio.getScale() > 1.0f)
                inicio.changeScale(-Botao.scaleStep*delta);
        }

        if(sobreInstrucoes){
            if(instrucoes.getScale() < 1.05f)
                instrucoes.changeScale(Botao.scaleStep*delta);

            if(input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)){
                sb.enterState(StarFox.INSTRUCTIONSSTATE, new FadeOutTransition(), new FadeInTransition());
                instrucoes.setScale(1);
            }
        }else{
            if(instrucoes.getScale() > 1.0f)
                instrucoes.changeScale(-Botao.scaleStep*delta);
        }

        if(sobreCreditos){
            if(creditos.getScale() < 1.05f)
                creditos.changeScale(Botao.scaleStep*delta);

            if(input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)){
                sb.enterState(StarFox.CREDITSTATE, new FadeOutTransition(), new FadeInTransition());
                creditos.setScale(1);
            }
        }else{
            if(creditos.getScale() > 1.0f)
                creditos.changeScale(-Botao.scaleStep*delta);
        }

        if(sobreRecordes){
            if(recordes.getScale() < 1.05f)
                recordes.changeScale(Botao.scaleStep*delta);

            if(input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)){
                sb.enterState(StarFox.RECORDESSTATE, new FadeOutTransition(), new FadeInTransition());
                recordes.setScale(1);
            }
        }else{
            if(recordes.getScale() > 1.0f)
                recordes.changeScale(-Botao.scaleStep*delta);
        }
    }

}